package cn.wuxun.user.service;

import java.util.UUID;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.jt.common.pojo.User;
import com.jt.common.utils.MD5Util;
import com.jt.common.utils.MapperUtil;
import com.jt.common.utils.PrefixKey;

import cn.wuxun.user.mapper.UserMapper;
import redis.clients.jedis.Jedis;

/**
 * 具体实现业务逻辑
 * 
 * @author Tedu
 *
 */
@Service
public class UserService {
	@Autowired
	private UserMapper userMapper;
	private ObjectMapper mapper = MapperUtil.MP;
	@Autowired
	private Jedis jedis;

	/**
	 * 
	 * @param user
	 * @return 逻辑流程:验证用户名密码是否正确(不正确返回) 正确则存入redis
	 */
	public String doLogin(User user) {
		// 根据用户名和密码查询用户是否存在mysql中
		try {
//test			System.out.println("jedis:"+jedis.toString());
//test			System.out.println("md5加密前:"+user.getPwd());
			user.setPwd(MD5Util.md5(user.getPwd()));
//test			System.out.println("md5加密后:"+user.getPwd());
			User exist = userMapper.queryUserByNameAndPassword(user);
			System.out.println("service:"+exist);
			if (exist == null) {// 登录失败,没有数据可以存储在redis
				// 返回一个""
				return "";
			} else {
				String ticket = PrefixKey.USER_EM_TICKET_KEY + System.currentTimeMillis() + user.getUname();
				String userJson;
				userJson = mapper.writeValueAsString(exist);
				// 判断当前用户是否曾经有人登录过
				String existTicket = jedis.get(PrefixKey.USER_LOGINED_CHECK_KEY + exist.getUid());
				// 顶替实现.不允许前一个登录的人ticket存在
				if (StringUtils.isNotEmpty(existTicket)) {
					jedis.del(existTicket);
				}
				// 定义当前客户端登录的信息 userId:ticket
				jedis.setex(PrefixKey.USER_LOGINED_CHECK_KEY + exist.getUid(), 60 * 30, ticket);
				// 用户登录超时30分钟
				jedis.setex(ticket, 60 * 30, userJson);
				return ticket;
			}
		} catch (Exception e) {
			e.printStackTrace();
			return "";
		}
	}

	/**
	 * 从redis中删除k-v
	 */
	public void logout(User user) {
		jedis.del(user.getUid());
	}

	/**
	 * 注册service 逻辑流程:从表单里获得user 验证是否重复(重复直接返回) 不重复则执行保存-( 生成UUID 密码md5加密
	 * 执行sql语句 )
	 */

//	public void modifyPassword(User user) {
//		userMapper.modifyPassword(user);
//
//	}
  public Integer checkUsername(String userName) {
		
		return userMapper.unameIsExist(userName);
	}
	public void userSave(User user) {
		user.setUid(UUID.randomUUID().toString());
		// 加密password
		System.out.println(MD5Util.md5(user.getPwd()));
		user.setPwd(MD5Util.md5(user.getPwd()));
		// insert 数据到数据库
		userMapper.userSave(user);
	}

	public String queryUserJson(String ticket) {

		// ShardedJedis jedis = pool.getResource();
		String userJson = "";
		try {
			// 首先判断超时剩余时间
			Long leftTime = jedis.pttl(ticket);
			// 少于10分钟,延长5分钟
			if (leftTime < 1000 * 60 * 10l) {
				jedis.pexpire(ticket, leftTime + 1000 * 60 * 5);
			}
			userJson = jedis.get(ticket);
			return userJson;
		} catch (Exception e) {
			e.printStackTrace();
			return "";
		}
	}

}
